package excel

import (
	"errors"
	"github.com/xuri/excelize/v2"
	"os"
	"path/filepath"
)

type Excelservice struct{}

func NewExcelService() *Excelservice {
	return &Excelservice{}
}

type LoadFile struct {
	Name string `json:"name"`
	Type string `json:"type"`
}

// 获取路径下的所有文件，提取文件名，返回LoadFile数组
func (*Excelservice) GetFiles() ([]LoadFile, error) {
	//获取到public目录
	dir, _ := os.Getwd()
	//判断如果是windows系统，就把\替换成/,public目录下的excel目录为excel文件夹
	if os.IsPathSeparator('\\') {
		dir = dir + "\\public\\excel\\"
	} else {
		dir = dir + "/public/excel/"
	}
	dirPth := dir //获取当前目录
	files := make([]LoadFile, 1)
	dir, err := filepath.Abs(dirPth)
	if err != nil {
		return nil, err
	}
	filepath.Walk(dir, func(filename string, fi os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if fi.IsDir() {
			return nil
		}
		//后缀名
		ext := filepath.Ext(fi.Name())
		files = append(files, LoadFile{
			Name: fi.Name(),
			Type: ext, //文件后缀名
		})
		return nil
	})
	//从files中提取文件名，删除后缀
	for i, file := range files {

		if filepath.Ext(file.Type) == ".xlsx" {
			files[i].Name = file.Name[0 : len(file.Name)-5]
		}
		if filepath.Ext(file.Type) == ".xls" {
			files[i].Name = file.Name[0 : len(file.Name)-4]
		}
		if filepath.Ext(file.Type) == ".csv" {
			files[i].Name = file.Name[0 : len(file.Name)-4]
		}
	}
	//过滤掉files中的file中的Name为空的元素
	var files2 []LoadFile
	for _, file := range files {
		if file.Name != "" {
			files2 = append(files2, file)
		}
	}
	//判断files2是否为空
	if len(files2) == 0 {
		err33 := errors.New("无文件，请放入指定文件")
		return nil, err33
	}
	return files2, nil
}

func (e *Excelservice) LoadFile(file *os.File) error {
	f, err := excelize.OpenReader(file)
	defer f.Close()
	if err != nil {
		return err
	}
	//获取第一个sheet
	sheetName := f.GetSheetName(0)
	_, err = f.GetRows(sheetName)
	if err != nil {
		return err
	}

	return nil
}
